package users

import (
	"errors"
	"fiberx/internal/dao"
	"fiberx/internal/model"
	"fiberx/internal/utils"
	"time"

	"github.com/gofiber/fiber/v3"
)

func (u *Users) Register(ctx fiber.Ctx, secret, email, code string) (err error) {
	// 优先校验OTP_CODE
	if utils.OTP.VerifyOTP(secret, code) {
		// 验证通过则保存到数据库
		// 检查用户是否已经注册:如果是第一个注册的，就将role设置为管理员admin
		users, err := dao.User.Find()
		if err != nil {
			return err
		}
		if len(users) > 0 {
			// 验证通过则保存到数据库
			err = dao.User.Create(&model.User{
				Email:         email,
				OtpSecret:     secret,
				LastLoginTime: time.Now(),
				Role:          "user",
			})
			if err != nil {
				return err
			}
		} else {
			// 验证通过则保存到数据库
			err = dao.User.Create(&model.User{
				Email:         email,
				OtpSecret:     secret,
				LastLoginTime: time.Now(),
				Role:          "admin",
			})
			if err != nil {
				return err
			}
		}
	} else {
		return errors.New("OTP_CODE校验失败")
	}
	return nil
}
